/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.qp.smsmarketing.view.mbean;

import com.qp.smsmarketing.view.mbean.abstractmbean.AbstractMBean;
import com.qp.smsmarketing.dao.MensagemDAO;
import com.qp.smsmarketing.entity.Mensagem;
import com.qp.smsmarketing.entity.MensagemContato;
import com.qp.smsmarketing.listagem.ListagemAgendadas;
import com.qp.smsmarketing.listagem.ListagemEstatistica;
import com.qp.smsmarketing.listagem.ListagemMensagem;
import com.qp.smsmarketing.listagem.ListagemMensagemContato;
import com.qp.smsmarketing.view.View;
import com.qp.smsmarketing.view.ViewMensagem;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTable;

/**
 *
 * @author waldenilson
 */
public class MensagemMBean extends AbstractMBean {

    private ViewMensagem vMensagem;
    private MensagemDAO gdao = new MensagemDAO();
    private Mensagem cadMensagem = new Mensagem();
    private List<Mensagem> lista;
    private int registros;

    public void exibirView(ViewMensagem vg) {
        buscarCrudMensagem(vg);
        vg.getBt_novo().setEnabled(false);
        carregarView(vMensagem, vg);
    }

    public void novoObjeto(ViewMensagem vg) {
        vMensagem = vg;
        setCadMensagem(new Mensagem());
        vMensagem.getTf_nome().setText("");
        vMensagem.getTf_desc().setText("");
        vMensagem.getBt_novo().setEnabled(false);
        vMensagem.getCb_ativo().setSelected(true);
    }

    public String salvarObjeto(ViewMensagem vg) {
        vMensagem = vg;
        String retorno = "error";
        getCadMensagem().setAssuntoMensagem(vMensagem.getTf_nome().getText());
        getCadMensagem().setCorpoMensagem(vMensagem.getTf_desc().getText());
        getCadMensagem().setStatusMensagem(vMensagem.getCb_ativo().isSelected());

        // verificações
        if (getCadMensagem().getAssuntoMensagem().length() < 3) {
            retorno = "verify";
            return retorno;
        }

        if (getCadMensagem().getIdMensagem() == null) {
            //JOptionPane.showMessageDialog(null,"salvar");
            if (gdao.salvarObj(getCadMensagem())) {
                retorno = "ok";
            }
        } else {
            //JOptionPane.showMessageDialog(null,"alterar");
            if (gdao.atualizarDados(getCadMensagem())) {
                retorno = "ok";
            }
        }
        return retorno;
    }

    public void buscarCrudMensagem(ViewMensagem vg) {
        vMensagem = vg;
        lista = gdao.buscarTodos();
        int x = 0;
        for (Mensagem Mensagem : lista) {
            vMensagem.getTableMensagem().setValueAt(Mensagem.getIdMensagem().toString(), x, 0);
            vMensagem.getTableMensagem().setValueAt(Mensagem.getAssuntoMensagem(), x, 1);
            vMensagem.getTableMensagem().setValueAt(Mensagem.getCorpoMensagem(), x, 2);
            vMensagem.getTableMensagem().setValueAt(Mensagem.getStatusMensagem(), x, 3);
            x++;
        }
        setRegistros(x);
        vMensagem.getBt_novo().setEnabled(true);
        //vMensagem.setTableMensagem( ocultarColuna(vMensagem.getTableMensagem(),2) );
    }

    public void selecionarRegistro(ViewMensagem v) {
        vMensagem = v;
        int i = vMensagem.getTableMensagem().getSelectedRow();
        //buscarCrudMensagem(v);
        setRegistros(gdao.buscarTodos().size());
        if ((i + 1) <= getRegistros()) {
            getCadMensagem().setAssuntoMensagem(vMensagem.getTableMensagem().getValueAt(i, 1).toString());
            if (vMensagem.getTableMensagem().getValueAt(i, 1) != null) {
                getCadMensagem().setCorpoMensagem(vMensagem.getTableMensagem().getValueAt(i, 2).toString());
            } else {
                getCadMensagem().setCorpoMensagem("");
            }
            getCadMensagem().setStatusMensagem((Boolean) vMensagem.getTableMensagem().getValueAt(i, 3));
            getCadMensagem().setIdMensagem(Integer.parseInt(vMensagem.getTableMensagem().getValueAt(i, 0).toString()));

            vMensagem.getTf_nome().setText(getCadMensagem().getAssuntoMensagem());
            vMensagem.getTf_desc().setText(getCadMensagem().getCorpoMensagem());
            vMensagem.getCb_ativo().setSelected(getCadMensagem().getStatusMensagem());
        } else {
            novoObjeto(v);
        }
    }

    /**
     * @return the cadMensagem
     */
    public Mensagem getCadMensagem() {
        return cadMensagem;
    }

    /**
     * @param cadMensagem the cadMensagem to set
     */
    public void setCadMensagem(Mensagem cadMensagem) {
        this.cadMensagem = cadMensagem;
    }

    /**
     * @return the registros
     */
    public int getRegistros() {
        return registros;
    }

    /**
     * @param registros the registros to set
     */
    public void setRegistros(int registros) {
        this.registros = registros;
    }

    /**
     * Metodo filtro de Contato para Aba Principal
     *
     * @param view
     * @param contato - nome do Contato utilizado para filtro
     */
    public void filtraPrincipalPorNomeContato(View view, String contato) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByContato(contato);
        atualizaTabelaPrincipal(view, list);
    }

    /**
     * Metodo filtro de Contato para Aba Principal
     *
     * @param view
     * @param grupo nome do Grupo do Contato utilizado para filtro
     */
    public void filtraPrincipalPorGrupoContato(View view, String grupo) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByGrupo(grupo);
        atualizaTabelaPrincipal(view, list);
    }

    /**
     * Metodo filtro de Contato para Aba Principal
     *
     * @param view
     * @param celular celular do Contato utilizado para filtro
     */
    public void filtraPrincipalPorCelularContato(View view, String celular) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByCelular(celular);
        atualizaTabelaPrincipal(view, list);
    }

    /**
     * Metodo filtro de Contato para Aba Principal
     *
     * @param view
     * @param data data de aniversario do Contato utilizado para filtro
     */
    public void filtraPrincipalPorAniversario(View view, String data) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByAniversario(data);
        atualizaTabelaPrincipal(view, list);

    }

    /**
     *
     */
    public void filtraTodos(View view) {
        int abaSelecionada = view.getTabpanel().getSelectedIndex();
        List<MensagemContato> list = gdao.buscar();

        switch (abaSelecionada) {
            case 0:
                atualizaTabelaPrincipal(view, list);
//                break;
            case 4:
                atualizaTabelaAgendadas(view, list);
//                break;
            case 5:
                atualizaTabelaEstatistica(view, list);
//                break;

        }
    }

    public void filtraTodasMensagens(View view) {
        List<Mensagem> list = gdao.buscarTodos();
        atualizaTabelaMensagens(view, list);
    }

    /**
     * Metodo filtro de Mensagens para Aba Mensagens
     *
     * @param view
     * @param contato nome do Contato
     */
    public void filtraMensagensPorNomeContato(View view, String contato) {
        List<Mensagem> list = gdao.filtrarMensagensByContato(contato);
        atualizaTabelaMensagens(view, list);
    }

    /**
     * Metodo filtro de Mensagens para Aba Mensagens
     *
     * @param view
     * @param grupo nome grupo do Contato
     */
    public void filtraMensagensPorGrupoContato(View view, String grupo) {
        List<Mensagem> list = gdao.filtrarMensagensByGrupo(grupo);
        atualizaTabelaMensagens(view, list);
    }

    /**
     * Metodo filtro de Mensagens para Aba Mensagens
     *
     * @param view
     * @param celular numero do celular do Contato para filtro
     */
    public void filtraMensagensPorCelularContato(View view, String celular) {
        List<Mensagem> list = gdao.filtrarMensagensByCelular(celular);
        atualizaTabelaMensagens(view, list);
    }

    /**
     * Metodo filtro de Mensagens para Aba Mensagens
     *
     * @param view
     * @param data data de aniversario do contato para filtro
     */
    public void filtraMensagensPorAniversarioContato(View view, String data) {
        List<Mensagem> list = gdao.filtrarMensagensByAniversario(data);
        atualizaTabelaMensagens(view, list);
    }

    /**
     * @param view
     * @param contato
     */
    public void filtraAgendadasPorNomeContato(View view, String contato) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByContato(contato);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     * @param view
     * @param grupo
     */
    public void filtraAgendadasPorGrupoContato(View view, String grupo) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByGrupo(grupo);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     * @param view
     * @param celular
     */
    public void filtraAgendadasPorCelularContato(View view, String celular) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByCelular(celular);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     * @param view
     * @param dataAniversario
     */
    public void filtraAgendadasPorAniversarioContato(View view, String dataAniversario) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByAniversario(dataAniversario);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     *
     * @param view
     * @param contato
     * @param dataAgendada1
     * @param dataAgendada2
     */
    public void filtraAgendadasPorNomeContatoPorData(View view, String contato, Date dataAgendada1, Date dataAgendada2) {
        List<MensagemContato> list = gdao.filtrarDataByContato(contato, dataAgendada1, dataAgendada2);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     *
     * @param view
     * @param grupo
     * @param dataAgendada1
     * @param dataAgendada2
     */
    public void filtraAgendadasPorGrupoContatoPorData(View view, String grupo, Date dataAgendada1, Date dataAgendada2) {
        List<MensagemContato> list = gdao.filtrarDataByGrupo(grupo, dataAgendada1, dataAgendada2);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     *
     * @param view
     * @param celular
     * @param dataAgendada1
     * @param dataAgendada2
     */
    public void filtraAgendadasPorCelularContatoPorData(View view, String celular, Date dataAgendada1, Date dataAgendada2) {
        List<MensagemContato> list = gdao.filtrarDataByCelular(celular, dataAgendada1, dataAgendada2);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     *
     * @param view
     * @param aniversario
     * @param dataAgendada1
     * @param dataAgendada2
     */
    public void filtraAgendadasPorAniversarioContatoPorData(View view, String aniversario, Date dataAgendada1, Date dataAgendada2) {
        List<MensagemContato> list = gdao.filtrarDataByAniversario(aniversario, dataAgendada1, dataAgendada2);
        atualizaTabelaAgendadas(view, list);
    }

    /**
     *
     * @param view
     * @param contato
     */
    public void filtraEstatisticaPorNomeContato(View view, String contato) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByContato(contato);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param grupo
     */
    public void filtraEstatisticaPorGrupoContato(View view, String grupo) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByGrupo(grupo);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param celular
     */
    public void filtraEstatisticaPorCelularContato(View view, String celular) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByCelular(celular);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param aniversario
     */
    public void filtraEstatisticaPorAniversarioContato(View view, String aniversario) {
        List<MensagemContato> list = gdao.filtrarMensagensContatoByAniversario(aniversario);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param contato
     * @param data1
     * @param data2
     */
    public void filtraEstatisticaPorContatoPorData(View view, String contato, Date data1, Date data2) {
        List<MensagemContato> list = gdao.filtrarDataByContato(contato, data1, data2);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param grupo
     * @param data1
     * @param data2
     */
    public void filtraEstatisticaPorGrupoPorData(View view, String grupo, Date data1, Date data2) {
        List<MensagemContato> list = gdao.filtrarDataByGrupo(grupo, data1, data2);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param celular
     * @param data1
     * @param data2
     */
    public void filtraEstatisticaPorCelularPorData(View view, String celular, Date data1, Date data2) {
        List<MensagemContato> list = gdao.filtrarDataByCelular(celular, data1, data2);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param aniversario
     * @param data1
     * @param data2
     */
    public void filtraEstatisticaPorAniversarioPorData(View view, String aniversario, Date data1, Date data2) {
        List<MensagemContato> list = gdao.filtrarDataByAniversario(aniversario, data1, data2);
        atualizaTabelaEstatistica(view, list);
    }

    /**
     *
     * @param view
     * @param list
     */
    private void atualizaTabelaPrincipal(View view, List<MensagemContato> list) {
        JTable tblPrincipal = view.getTblPrincipal();
        ListagemMensagemContato listagem = new ListagemMensagemContato(list);
        tblPrincipal.setModel(listagem);
        view.getLbTotalPrincipal().setText("Total encontrado.:" + list.size());
    }

    /**
     *
     * @param view
     * @param list
     */
    private void atualizaTabelaMensagens(View view, List<Mensagem> list) {
        JTable tblMensagens = view.getTblMensagens();
        ListagemMensagem listagem = new ListagemMensagem(list);
        tblMensagens.setModel(listagem);
        view.getLbTotalMensagens().setText("Total encontrado.:" + list.size());
    }

    /**
     *
     * @param view
     * @param list
     */
    private void atualizaTabelaAgendadas(View view, List<MensagemContato> list) {
        JTable tblAgendadas = view.getTblAgendadas();
        ListagemAgendadas listagem = new ListagemAgendadas(list);
        tblAgendadas.setModel(listagem);
        view.getLbTotalAgendadas().setText("Total encontrado.:" + list.size());
    }

    private void atualizaTabelaEstatistica(View view, List<MensagemContato> list) {
        JTable tblEstatistica = view.getTblEstatistica();
        ListagemEstatistica listagem = new ListagemEstatistica(list);
//        tblEstatistica.
        tblEstatistica.setModel(listagem);
        view.getLbTotalEstatistica().setText("Total encontrado.:" + list.size());
    }
}
